package com.snopy.leetcode.index1_1000.index301_400;

/**
 * @author snopy
 * @version 1.0.0
 * @classname Question357
 * @description 统计各位数字都不同的数字个数
 *
 * 给你一个整数 n ，统计并返回各位数字都不同的数字 x 的个数，其中 0 <= x < 10n。
 *
 * 示例 1：
 *
 * 输入：n = 2
 * 输出：91
 * 解释：答案应为除去 11、22、33、44、55、66、77、88、99 外，在 0 ≤ x < 100 范围内的所有数字。 
 * 示例 2：
 *
 * 输入：n = 0
 * 输出：1
 *
 * @email 77912204@qq.com
 * @date 2022/04/11 21:06
 */
public class Question357 {
    public static void main(String[] args) {
        int num = countNumbersWithUniqueDigits(1);
        System.out.println(num);
    }
    /**
     * @Description
     * 0 1        0    1
     * 1 10       0    10
     * 2 100      9    91
     * 3 999           739 260
     * 4 10000    9+9+9 2n(n-1)
     *
     * @param n:
     * @return: int
     * @Date 2022-04-11
     * @Author txl77912204@gmail.com
     **/
    public static int countNumbersWithUniqueDigits(int n) {
        if (n==0){
            return 1;
        }
        int res =10,m = 9;
        for (int i = 0; i < n-1 ; i++) {
            m*=9-i;
            res+=m;
        }
        return res;
    }

}
